//package net.jsoft.pms.web.oracle.risk;
//
//import java.text.ParseException;
//import java.util.ArrayList;
//import java.util.Calendar;
//import java.util.Collection;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.TreeMap;
//
//import javax.annotation.Resource;
//
//import org.apache.commons.lang3.time.DateFormatUtils;
//import org.apache.commons.lang3.time.DateUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.ResponseBody;
//
//import net.jsoft.platform.core.util.ref.BeanRefUtil;
//import net.jsoft.platform.core.web.BaseController;
//import net.jsoft.pms.service.oracle.plan.IPlanService;
//import net.jsoft.pms.service.oracle.versionplan.IVersionPlanService;
//import net.jsoft.pms.vo.plan.PlanTaskInfo;
//import net.jsoft.pms.vo.problems.ProblemTaskBean;
//import net.jsoft.pms.vo.workload.WorkLoad;
//import net.jsoft.pms.web.oracle.plan.PlanController;
//import net.jsoft.pms.web.oracle.problems.ProblemsController;
//
//@Controller
//@RequestMapping("/risk")
//@SuppressWarnings("unchecked")
//public class RiskController extends BaseController
//{
//
//    @Autowired
//    private PlanController plan;
//    @Autowired
//    private ProblemsController problems;
//    @Resource(name = "planServiceImpl")
//    private IPlanService ps;
//
//    @Resource(name = "versionPlanServiceImpl")
//    private IVersionPlanService versionPlanService;
//
//    @RequestMapping("/planRisk")
//    @ResponseBody
//    public Map<String, Object> planRisk()
//    {
//        Map<String, Object> resp = new HashMap<String, Object>();
//
//        // 获取所有任务
//        Map<String, Object> topPlan = plan.topdesk();
//        List<PlanTaskInfo> allTasks = (List<PlanTaskInfo>) topPlan.get("allTasks");
//        // 获取最新的问题列表
//        List<ProblemTaskBean> lateWeekPro = (List<ProblemTaskBean>) problems.overall().get("thisWeek");
//        List<ProblemTaskBean> riskPro = new ArrayList<ProblemTaskBean>();
//        riskPro.addAll(lateWeekPro);
//        List<ProblemTaskBean> riskProTemp = new ArrayList<ProblemTaskBean>();
//        // 判定问题列表中的问题是否都安排了计划
//        for (ProblemTaskBean p : lateWeekPro)
//        {
//            String pId = p.getId();
//            for (PlanTaskInfo pti : allTasks)
//            {
//                if (pId.equals(pti.getProblemsId()))
//                {
//                    riskProTemp.add(p);
//                    break;
//                }
//            }
//        }
//        // 风险1 没有计划的问题
//        riskPro.removeAll(riskProTemp);
//        resp.put("riskPro", riskPro);
//
//        // 获取近三周的日期
//        List<PlanTaskInfo> threeWeeksTasks = new ArrayList<PlanTaskInfo>();
//        String lastWeekMonday = (String) topPlan.get("lastWeekMonday");
//        String nextWeekSunday = (String) topPlan.get("nextWeekSunday");
//
//        // 近三周的任务
//        threeWeeksTasks.addAll((Collection<? extends PlanTaskInfo>) topPlan.get("lastWeek"));
//        threeWeeksTasks.addAll((Collection<? extends PlanTaskInfo>) topPlan.get("thisWeek"));
//        threeWeeksTasks.addAll((Collection<? extends PlanTaskInfo>) topPlan.get("nextWeek"));
//        Map<String, Map<String, Integer>> map = new HashMap<String, Map<String, Integer>>();
//
//        // 获取所有资源
//        //        ProjectFile project = (ProjectFile) ps.getAllTasks().get("project");
//        //        ResourceContainer rc = project.getAllResources();
//        List<String> rc = ps.getAllResource();
//        // 初始化资源时间列表
//        map = initResourceMap(rc, lastWeekMonday, nextWeekSunday);
//        // 整理资源耗时
//        for (PlanTaskInfo p : threeWeeksTasks)
//        {
//            String name = p.getResourceName();
//            Map<String, Integer> temp = map.get(name);
//            List<String> list = getAllDate(DateFormatUtils.format(p.getEarlyStart(), "yyyy-MM-dd"), DateFormatUtils.format(p.getEarlyFinish(), "yyyy-MM-dd"));
//            for (String l : list)
//            {
//                if (temp.get(l) != null)
//                {
//                    temp.put(l, temp.get(l) + 1);
//                }
//
//            }
//            map.put(name, temp);
//        }
//
//        List<WorkLoad> workLoad = new ArrayList<WorkLoad>();
//        for (String k : map.keySet())
//        {
//            WorkLoad work = new WorkLoad();
//            work.setName(k);
//            int i = 1;
//            for (String k1 : map.get(k).keySet())
//            {
//                BeanRefUtil.setFieldValue(work, "wl" + i, map.get(k).get(k1) + "");
//                i++;
//            }
//            workLoad.add(work);
//        }
//        resp.put("workLoad", workLoad);
//
//        //lastWeekMonday  nextWeekSunday
//
//        List<String> colDate = getAllDate(lastWeekMonday, nextWeekSunday);
//        for (int i = 0; i < colDate.size(); i++)
//        {
//            String d = colDate.get(i);
//            d = d.replaceAll("-", "").substring(4);
//            colDate.set(i, d);
//        }
//        resp.put("colDate", colDate);
//
//        return resp;
//    }
//
//    @RequestMapping("/versionPlanRisk")
//    @ResponseBody
//    public Map<String, Object> versionPlanRisk()
//    {
//        Map<String, Object> resp = new HashMap<String, Object>();
//
//        //获取所有的版本
//        List<String> versions = versionPlanService.getVersions();
//
//        resp.put("versions", versions);
//
//        // 应该安排版本计划的 没有安排
//        List<PlanTaskInfo> noVersionPlan = versionPlanService.getNoVersionPlan();
//
//        //延期未出厂的计划
//        List<PlanTaskInfo> delayVersionPlan = versionPlanService.getDelayVersionPlan();
//
//        resp.put("noVersionPlan", noVersionPlan);
//
//        resp.put("delayVersionPlan", delayVersionPlan);
//        return resp;
//    }
//
//    /**
//     * 初始化人员列表
//     * 
//     * @param rc
//     * @param lastWeekMonday
//     * @param nextWeekSunday
//     * @return
//     */
//    private Map<String, Map<String, Integer>> initResourceMap(List<String> rc, String lastWeekMonday, String nextWeekSunday)
//    {
//        Map<String, Map<String, Integer>> map = new HashMap<String, Map<String, Integer>>();
//
//        //        Iterator<net.sf.mpxj.Resource> iterator = rc.iterator();
//        //        while (iterator.hasNext())
//        for (String r : rc)
//        {
//            //            net.sf.mpxj.Resource r = iterator.next();
//
//            //            if (r.getName() == null)
//            //            {
//            //                continue;
//            //            }
//
//            Map<String, Integer> temp = new TreeMap<String, Integer>();
//            List<String> list = getAllDate(lastWeekMonday, nextWeekSunday);
//            for (String l : list)
//            {
//                temp.put(l, 0);
//            }
//            map.put(r, temp);
//        }
//
//        return map;
//    }
//
//    /**
//     * 获取一段时间内的所有日期
//     * 
//     * @param start
//     * @param end
//     * @return
//     */
//    private List<String> getAllDate(String start, String end)
//    {
//        List<String> list = new ArrayList<String>();
//        try
//        {
//            Date lastWeekMondayD = DateUtils.parseDate(start, "yyyy-MM-dd");
//            Date nextWeekSundayD = DateUtils.parseDate(end, "yyyy-MM-dd");
//            if (lastWeekMondayD.compareTo(nextWeekSundayD) > 0)
//            {
//                return list;
//            }
//            Calendar lD = Calendar.getInstance();
//            lD.setTime(lastWeekMondayD);
//
//            Calendar nD = Calendar.getInstance();
//            nD.setTime(nextWeekSundayD);
//            while (true)
//            {
//                if (lD.after(nD))
//                {
//                    break;
//                }
//                list.add(DateFormatUtils.format(lD, "yyyy-MM-dd"));
//                lD.add(Calendar.DATE, 1);
//            }
//        }
//        catch (ParseException e)
//        {
//            e.printStackTrace();
//        }
//        return list;
//
//    }
//}
